/*
 * Copyright (c) 2018-2999 湖南洛云网络科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yami.shop.bean.model.OrderItem;
import com.yami.shop.bean.param.PayTopParam;
import com.yami.shop.bean.param.ProdAnalysisSurveyParam;
import com.yami.shop.bean.param.ProdEffectParam;
import com.yami.shop.bean.param.ProdEffectRespParam;
import com.yami.shop.common.util.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author yami
 */
public interface OrderItemMapper extends BaseMapper<OrderItem> {

    /**
     * 根据订单号获取订单项信息
     * @param orderNumber 订单号
     * @param lang 语言
     * @return 订单项信息
     */
    List<OrderItem> listByOrderNumber(@Param("orderNumber") String orderNumber, @Param("lang") Integer lang);

    /**
     * 更新订单项的物流状态
     * @param orderItems 订单项
     */
    void updateByDeliveries(@Param("orderItems") List<OrderItem> orderItems);

    /**
     * 根据订单号获取订单项信息
     * @param orderNumber 订单号
     * @return 订单项信息
     */
    List<OrderItem> getListByOrderNumber(@Param("orderNumber") String orderNumber);

    /**
     * 获取支付金额TOP
     * @param page 分页信息
     * @param param 时间
     * @param dbLang 语言
     * @return 支付金额TOP 订单项
     */
    IPage<PayTopParam> getPayAmounts(PageParam<OrderItem> page, @Param("param") ProdAnalysisSurveyParam param, @Param("dbLang") Integer dbLang);

    /**
     * 统计某个商品的付款人数
     * @param prodId 商品id
     * @param param 查询范围
     * @return 付款人数
     */
    Integer countPayPerson(@Param("prodId") Long prodId, @Param("param") ProdEffectParam param);

    /**
     * 统计某个商品在特定时间内的付款人数
     * @param prodId 商品id
     * @param shopId 店铺id
     * @param startTime 开始时间
     * @param endTime 结束是按
     * @return 付款人数
     */
    Integer getPayPersonNumByParam(@Param("prodId") Integer prodId, @Param("shopId") Long shopId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 批量保存订单项信息
     * @param orderItems 订单项
     */
    void insertBatchOrderItemLang(@Param("orderItems") List<OrderItem> orderItems);

    /**
     * 获取获取商品效果分析数据
     * @param prodIds 商品id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 商品效果分析数据
     */
    List<ProdEffectRespParam> getProdEffectByDateAndProdIds(@Param("prodIds") List<Long> prodIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);


//    List<OrderItem> getUnCloseRefundOrderItemByOrderNumber(String orderNumber);

//	void insertBatch(List<OrderItem> orderItems);

//	List<OrderItem> getPayByOrderNumber(@Param("orderNumber") String orderNumber);

}
